iT邦幫忙

2024 iThome 鐵人賽

DAY 9
1
自我挑戰組

學習網頁開發系列 第 9

Django 分頁

  • 分享至 

  • xImage
  •  

當網頁資料太多時,把資料拆成一多頁,一次讓使用者只看特定數量的資料是很常見的做法,這個做法叫做分頁(Pagination)。

Django 對分頁非常友善,它有內建一個類別就叫 Pagination ,可以直將所有物件基於選擇數量,拆分成好幾組。接著我們只需要以 URL 的 QueryString 給定的參數來決定要回復哪一組即可。

from django.core.paginator import Paginator

# 假定我有一個 QuerySet 叫做 qs
# items_count: 一頁中要有幾個物件
items_count = 5
p = Paginator(qs, items_count)

# 自己設定 URL 的 QueryString 參數叫做 page
page_number = request.GET.get("page")
paginated_qs = p.get_page(page_number)

# 把 paginated_qs 丟進 template 即可
return render(request, "exmple.html", {"paginated_qs":paginated_qs})

在 Django Template 的部分,簡單跑個迴圈,並設定前一頁、後一頁的按鈕即可。
(程式有用 tailwind/daisy 排版)

<ul class="join flex justify-center gap-2">
    {% if pages.has_previous %}
        <li>
            <a class="join-item btn" href="?page={{pages.previous_page_number}}">
                &laquo 上一頁
            </a>
        </li>
    {% endif %}

    {% 顯示現在頁面 %} 
    <li class="join-item btn">
        第{{pages.number}}頁
    </li>
    

    {% if pages.has_next %}
        <li>
            <a class="join-item btn" href="?page={{pages.next_page_number}}">
                下一頁 &raquo
            </a>
        </li>
    {% endif %}
</ul>

上一篇
WSGI 和 ASGI
下一篇
CSRF, CORS
系列文
學習網頁開發13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言